// 给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。

// 你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}
var swapPairs = function(head) {
    let headnode = new ListNode(); //重新定义一个空的头节点用于辅助
    headnode.next = head;
    let res = headnode;
    console.log(res)
    while (res.next != null && res.next.next != null) { //(temp.next && temp.next.next) 条件可以写成这种形式
        let tmp = res.next.next; //先保存后一位的节点
        res.next.next = res.next.next.next; //将前一位的节点连接到后一位节点的next
        tmp.next = res.next;
        res.next = tmp; //将后一位节点连接到前节点的前一位（辅助节点的下一位）
        res = res.next.next;
    }
    return headnode.next;
};
let one = new ListNode(1);
let two = new ListNode(2);
let thr = new ListNode(3);
let four = new ListNode(4);
one.next = two;
two.next = thr;
thr.next = four;
// console.log(one)
swapPairs(one)
    // console.log(one)